package Level02.Three;

import java.util.ArrayList;

/**
 * 定义一个子任务类，实现 Runnable 接口：
 */
public class Task implements Runnable {
    //定义一个变量，用来记录正在运行的线程个数
    private Integer num;
    //定义一个 ArrayList 集合对象，用于存放子线程的名称；
    private final ArrayList<Object> arrayList = new ArrayList<>();

    //定义一个构造方法，把进程总数作为参数进来；
    public Task(Integer num) {
        //在构造方法中，给正在运行的线程个数赋值为线程总数；
        this.num = num;
    }

    public Task() {
    }

    @Override
    //重写 Runnable 接口的 run 方法 ；
    public void run() {
        //使用同步代码块，保证同一时间只能向集合中添加一个线程名称
        synchronized (arrayList) {
            //获取当前获得的线程名称
            String name = Thread.currentThread().getName();
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            arrayList.add("第" + num + "个线程名字为:" + name);
            //正在运行的线程个数减 1
            num--;
            //所有的线程运行结束后遍历集合，打印所有线程的名称；
            if (num == 0) {
                System.out.println("线程添加完毕");
                for (int i = 0; i < arrayList.size(); i++) {
                    System.out.println(arrayList.get(i));
                }
            }
        }
    }
}
